package com.hardware.view.controller;

import com.hardware.dll.AidierDLL;
import com.hardware.enums.*;
import com.hardware.view.service.InterfaceSetService;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.TextField;
import javafx.stage.Stage;

/**
 * 门锁接口配置 窗口
 *
 * @作者 韩宗森
 * @创建时间 2024年11月01日 10:59
 */
public class InterfaceSetController {

    // 服务器框
    @FXML
    private TextField serverText;

    // 门锁软件
    @FXML
    private ChoiceBox<DoorLockEnum> doorSoftwareChoice;

    // 端口
    @FXML
    private ChoiceBox<PortEnum> portChoice;

    // 发行机类型
    @FXML
    private ChoiceBox<EncoderEnum> encoderChoice;

    // TM发行机类型
    @FXML
    private ChoiceBox<TmEncoderEnum> tmEncoderChoice;

    // 公共通道
    @FXML
    private TextField publicWayText;


    private InterfaceSetService interfaceSetService;

    /**
     * 窗口初始化函数
     */
    @FXML
    public void initialize() {
        // 创建 interfaceSetService 对象
        interfaceSetService = new InterfaceSetService();

        // 初始化 门锁软件 下拉框选项
        interfaceSetService.initializeChoiceBox(doorSoftwareChoice, DoorLockEnum.class);
        doorSoftwareChoice.setOnAction(event -> doorSoftwareChoiceHandle()); // 绑定事件

        // 初始化 端口 下拉框选项
        interfaceSetService.initializeChoiceBox(portChoice, PortEnum.class);
        portChoice.setOnAction(event -> portChoiceHandle());

        // 初始化 发行机类型 下拉框选项
        interfaceSetService.initializeChoiceBox(encoderChoice, EncoderEnum.class);
        encoderChoice.setOnAction(event -> issueTypeChoiceHandle());

        // 初始化 TM发行机类型 下拉框选项
        interfaceSetService.initializeChoiceBox(tmEncoderChoice, TmEncoderEnum.class);
        tmEncoderChoice.setOnAction(event -> tmIssueTypeChoiceHandle());

    }

    /**
     * 门锁软件 下拉框事件
     */
    private void doorSoftwareChoiceHandle() {
        DoorLockEnum selectedItem = doorSoftwareChoice.getValue();
        System.out.println(" Key: " + selectedItem.getKey()+" Value: " + selectedItem.getValue());
    }

    /**
     * 端口 下拉框事件
     */
    private void portChoiceHandle() {
        PortEnum selectedItem = portChoice.getValue();
        System.out.println(" Key: " + selectedItem.getKey()+" Value: " + selectedItem.getValue());
    }

    /**
     * 发行机类型 下拉框事件
     */
    private void issueTypeChoiceHandle() {
        EncoderEnum selectedItem = encoderChoice.getValue();
        System.out.println(" Key: " + selectedItem.getKey()+" Value: " + selectedItem.getValue());
    }

    /**
     * TM发行机类型 下拉框事件
     */
    private void tmIssueTypeChoiceHandle() {
        TmEncoderEnum selectedItem = tmEncoderChoice.getValue();
        System.out.println(" Key: " + selectedItem.getKey()+" Value: " + selectedItem.getValue());
    }

    /**
     * 确定 按钮事件
     *
     * @param event
     */
    @FXML
    private void submit(ActionEvent event) {
        System.out.println("提交...");
        // 先结束工作期
        int end = AidierDLL.INSTANCE.EndSession();
        AidierStatus aidierStatus = AidierStatus.fromKey(end);
        System.out.println("先结束工作期..." + "状态码: " + aidierStatus.getKey() + ", 说明: " + aidierStatus.getValue());

        String serverStr = serverText.getText(); // 服务器框
        Integer doorSoftwareKey = doorSoftwareChoice.getValue().getKey(); // 门锁软件
        Integer portKey = portChoice.getValue().getKey(); // 端口
        Integer encoderKey = encoderChoice.getValue().getKey();// 发行机类型
        Integer tmEncoderKey = tmEncoderChoice.getValue().getKey(); // TM发行机类型
        String publicWayStr = publicWayText.getText();  // 公共通道

        String username="zhangsan";
        // 配置初始化参数
//        AidierService aidierService = new AidierServiceImpl();
//        aidierService.initDoor(doorSoftwareKey, serverStr, username, portKey, encoderKey, tmEncoderKey);

        // 设置串口
        interfaceSetService.setPort(doorSoftwareKey,portKey,encoderKey,tmEncoderKey);


        // 获取当前窗口的 Stage 对象
        Stage stage = (Stage) ((Button) event.getSource()).getScene().getWindow();
        // 关闭窗口
        stage.close();
    }

    /**
     * 取消 按钮事件
     * @param event
     */
    @FXML
    private void cancel(ActionEvent event) {

        // 获取当前窗口的 Stage 对象
        Stage stage = (Stage) ((Button) event.getSource()).getScene().getWindow();
        // 关闭窗口
        stage.close();
    }

}
